package projeto;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * Classe que permite a criacao de professores no sistema de bibliotecas
 * @author equipe
 *
 */

public class Professor implements Serializable{
	
	private static final long serialVersionUID = 1L;
	
	private String nome;
	private String matricula;
	protected List<Livro> bibliotecaParticular;
	private Sala sala;
	private Login login;
	protected TelaDeUsuario telaDeUsuario;
	
	
	/**
	 * Construtor que recebe os parametros para a criacao de um novo professor
	 * @param nome
	 * 		Nome do professor
	 * @param matricula
	 * 		Matricula do professor
	 * @param sala
	 * 		Sala do professor
	 * @throws Exception
	 * 		Quando o nome for null ou uma str vazia, quando a matricula for null ou uma str vazia e quando a sala for desconhecida.
	 */
	public Professor(String nome, String matricula, Sala sala) throws Exception {
		if(nome == null || nome.equals("")){
			throw new Exception("Nome Invalido");
		}
		if(matricula == null || matricula.equals("")){
			throw new Exception("Matricula Invalida");
		}
		if(sala == null){
			throw new Exception("Sala Invalida");
		}
		this.nome = nome;
		this.matricula = matricula;
		this.sala = sala;
		bibliotecaParticular = new ArrayList<Livro>();
	}
	
	/**
	 * Metodo capaz de adicionar um livro na biblioteca particular do professor.
	 * @param livro
	 * 		Livro a ser adicionado.
	 */
	
	public void adicionaLivro(Livro livro){
		
		bibliotecaParticular.add(livro);
	}
	
	/**
	 * Metodo que pega um livro do professor para realizar emprestimos.
	 * @param livro
	 * 		Um livro qualquer.
	 */
	

	public void pegaLivro(Livro livro){
		Livro pega;
		if(!(buscaLivroPorTitulo(livro.getNome())== null)){
			pega = buscaLivroPorTitulo(livro.getNome());
			
		}
		
	}
	
	/**
	 * Metodo capaz de pesquisar um livro na biblioteca particular do professor a partir do titulo desse livro.
	 * @param titulo
	 * 		Titulo do livro.
	 * @return
	 * 		O livro que foi pesquisado.
	 */
	public Livro buscaLivroPorTitulo(String titulo){
		
		for (int i = 0; i < bibliotecaParticular.size(); i++) {
			if (bibliotecaParticular.get(i).getNome().equals(titulo)){
				
				return bibliotecaParticular.get(i);
			}
			
		}
		return null;
	}
	
	/**
	 * Metodo capaz de realizar a pesquisa de um livro na bliblioteca do professor a atraves do nome do autor desse livro.
	 * @param autor
	 * 		Nome do autor do livro.
	 * @return
	 * 		O livro que foi pesquisado.
	 */
	
	public Livro buscaLivroPorAutor(String autor){
		
		for (int i = 0; i < bibliotecaParticular.size(); i++) {
			if (bibliotecaParticular.get(i).getAutor().equals(autor)) {
				return bibliotecaParticular.get(i);
			}
		}
		return null;
	}
	
	/**
	 * Metodo capaz de realizar uma pesquisa de um livro na biblioteca do professor atraves do id desse livro.
	 * @param id
	 * 		Id do livro.
	 * @return
	 * 		O livro que foi pesquisado.
	 */
	
	public Livro buscaLivroPorID(String id){
		
		for (int i = 0; i < bibliotecaParticular.size(); i++) {
			if (bibliotecaParticular.get(i).getId().equals(id)) {
				return bibliotecaParticular.get(i);
			}
			
		}
		return null;
	}
	
	/**
	 * Metodo capaz de acessar o nome do professor.
	 * @return
	 * 		O nome do professor.
	 */
	
	public String getNome(){
		return nome;
	}
	
	/**
	 * Metodo capaz de acessar a matricula do professor.
	 * @return
	 * 		Matricula do professor.
	 */
	public String getMatricula(){
		
		return matricula;
	}
	
	/**
	 * Metodo capaz de acessar a sala do professor.
	 * @return
	 * 		A sala do professor.
	 */
	
	public Sala getSala(){
		
		return sala;
	}
	/**
	 * Metodo que seta o login de um professor
	 * @param login login do professor
	 * @param senha senha do professor
	 * @throws Exception
	 */
	public void setLogin(String login, String senha) throws Exception{
		this.login = new Login(login, senha);
	}
	
	/**
	 * Metodo que retorna o login do professor
	 * @param professor professor a ser acessado
	 * @return
	 */
	public Login getLogin(Professor professor){
		return professor.login;
	}
	
	public void setTelaDeUsuario(TelaDeUsuario tela){
		this.telaDeUsuario = tela;
	}
}